/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package master.client;

import info.client.InfoClient;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
/**
 *
 * @author mark
 */
public class Users extends JFrame implements ActionListener{
     
    //Menubar
    private JMenuBar menubar = new JMenuBar();
    //Menu-tabs
    private JMenu _managementinfo;
    private JMenu _users;
    private JMenu _queries;
    //Menu-items
    private JMenuItem managementinfo;
    private JMenuItem users;
    private JMenuItem queries;

    //Tabel met users
    private JTable all_users;
    
    private DefaultTableModel dtm;
    private JScrollPane scrollpane;
    private JTabbedPane tabs;
    
    private JPanel panel = new JPanel();
    private JButton add_user = new JButton();
    private JButton change_user = new JButton();
    private JButton delete_user = new JButton();
    
    private int allrows;
    private int selectedrow;
    private String email;
    private String password;
    private String permissions;
    
    private String[] columns;
    private String query;

    public Users() 
    {
        panel.setLayout(null);
        
        _managementinfo = new JMenu("Management");
        _users = new JMenu("Gebruikers");
        _queries = new JMenu("Rapporten");
        
        managementinfo = new JMenuItem("Managementgegevens");
        users = new JMenuItem("Overzicht gebruikers");
        queries = new JMenuItem("Overzicht rapporten");
        
        menubar.add(_managementinfo);
        menubar.add(_users);
        menubar.add(_queries);
        
        _managementinfo.add(managementinfo);
        _users.add(users);
        _queries.add(queries);
        
        managementinfo.addActionListener(this);
        users.addActionListener(this);
        queries.addActionListener(this);
        
        add_user.addActionListener(this);
        change_user.addActionListener(this);
        delete_user.addActionListener(this);
        
        add_user.setText("Gebruiker toevoegen");
        add_user.setBounds(new Rectangle(80, 25, 160, 25));
        change_user.setText("Gebruiker wijzigen");
        change_user.setBounds(new Rectangle(320, 25, 160, 25));
        delete_user.setText("Gebruiker verwijderen");
        delete_user.setBounds(new Rectangle(560, 25, 160, 25));
        
        tabs = new JTabbedPane();
        tabs.setBounds(0, 70, 800, 500);

        menubar.setBounds(0, 0, 800, 20);
        
        fillTable();

        panel.add(menubar);
        panel.add(add_user);
        panel.add(change_user);
        panel.add(delete_user);
        
        setContentPane( panel );
        
        setVisible(true);
        setResizable(false);
        setSize(800, 600);
        setTitle("Mainscreen");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }
    
    public void fillTable()
    {
        query = "SELECT COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'inloggegevens'";
        
        //Het verzenden van de inlogquery over de socket
        InfoClient.socketconnection.send(query);
        
        Object[][] result2 = InfoClient.socketconnection.read();
        
        //kijkt hoeveel columns eruit de query komen, zodat we weten hoe groot de array moet worden
        int j = 0;
        for(Object[] k : result2)
        {
            for(Object kk : k)
            {
                j++;         
            }
        }
        //de columns voor de jtable
        columns = new String[j];
        
        int i = 0;
        for(Object[] k : result2)
        {
            for(Object kk : k)
            {
                columns[i] = kk.toString(); 
            }
            i++;
        }
        
        //Het verzenden van de inlogquery over de socket
        InfoClient.socketconnection.send("SELECT * from inloggegevens");
        //Het ophalen van de resultaten van de query
        Object[][] result = InfoClient.socketconnection.read();
        
        dtm = new DefaultTableModel(result, columns);
        
        all_users = new JTable(dtm);
        
        JTableHeader header = all_users.getTableHeader();
        header.setBounds(0, 55, 800, 20);
        
        all_users.setPreferredScrollableViewportSize(new Dimension(800, 200));
        all_users.setFillsViewportHeight(true);
        
        scrollpane = new JScrollPane(all_users);
        
        scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollpane.setHorizontalScrollBarPolicy(JScrollPane .HORIZONTAL_SCROLLBAR_ALWAYS);
        
        if(tabs.getTabCount() > 0)
        {
            tabs.remove(0);
        }

        all_users.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
        
        //Voeg de tabel toe aan de tabs
        tabs.add("Gebruikers", scrollpane);

        panel.add(tabs);
    }

        
    public void actionPerformed(ActionEvent e){     
        //Als er is geklikt op managementinfo in het menu.
        if (e.getSource() == managementinfo)
        {
            //Sluit dit scherm en open een nieuw ManagementInfo scherm
            this.setVisible(false);
            new ManagementInfo().setVisible(true);
            setDefaultCloseOperation(ManagementInfo.EXIT_ON_CLOSE);
        }
        //Als er op change_user is geklikt
        else if (e.getSource() == change_user)
        {
           //Kijk welke rij is geselecteerd     
           selectedrow = all_users.getSelectedRow();
           //Als er geen rij is geselecteerd
           if(selectedrow == -1)
           {
               //Laat een popupje zien waarop staat dat je een rij moet selecteren
                 JOptionPane.showMessageDialog(null, "Selecteer een rij","Mislukt",JOptionPane.WARNING_MESSAGE);
           }
           //Als er wel een rij is geselecteerd
           else
           {
               //Haal de waarden uit de rijen.
               email = dtm.getValueAt(selectedrow, 0).toString();
               password = dtm.getValueAt(selectedrow, 1).toString();
               permissions = dtm.getValueAt(selectedrow, 2).toString();
               //Open een nieuw Change_User scherm
               new Change_User(email, password, permissions).setVisible(true);
               setDefaultCloseOperation(Change_User.EXIT_ON_CLOSE);
           }
         }
         //Als er op add_user is geklikt
         else if (e.getSource() == add_user)
         {
            //Kijk hoeveel rijen er zijn en maak een array aan die zo groot is. 
            allrows = dtm.getRowCount();
            String[] emails = new String[allrows];
            //Vul de array met alle emailadressen die al bestaan
            for (int i=0; i<allrows; i++) {
                 email = dtm.getValueAt(i, 0).toString();
                 emails[i] = email;
            }
            //Maak een nieuw Add_User scherm aan en geef de array mee.
            new Add_User(emails).setVisible(true);
            setDefaultCloseOperation(Add_User.EXIT_ON_CLOSE);
        }
        //Als er op delete_user is geklikt
        else if (e.getSource() == delete_user)
        {
            //Haal de geselecteerde rij op.         
            selectedrow = all_users.getSelectedRow();
            //Als er geen rij is geselecteerd
            if(selectedrow == -1)
            {
                //Laat een popupje zien waraop staat dat je een rij moet selecteren
                JOptionPane.showMessageDialog(null, "Selecteer een rij","Mislukt",JOptionPane.WARNING_MESSAGE);
            }
            //Als er wel een rij is geselecteerd
            else
            {
                //Haal het emailadres van die rij op
                email = dtm.getValueAt(selectedrow, 0).toString();
                //Bouw de verwijderquery
                String query = "DELETE FROM inloggegevens Where email ='"+ email +"'";
                //Stuur de query over de socketconnectie naar de server
                InfoClient.socketconnection.send(query);
                                
                //verwijdert de geselecteerde rij uit de tabel
                dtm.removeRow(selectedrow);
                //Laat een popupje zien waarop staat dat de gebruiker is verwijderd.
                JOptionPane.showMessageDialog(null, email + " is verwijdert","Geslaagd",JOptionPane.INFORMATION_MESSAGE);
             }
        }
        //Als er in het menu op queries is geklikt
        else if (e.getSource() == queries)
        {
            //Sluit dit scherm en open een nieuw Queries scherm
            this.setVisible(false);
            new Queries().setVisible(true);
            setDefaultCloseOperation(Queries.EXIT_ON_CLOSE);
        }
        //Als er in het menu op users is geklikt
        else if (e.getSource() == users)
        {
            //Sluit dit scherm en open een nieuw Users scherm
            this.setVisible(false);
            new Users().setVisible(true);
            setDefaultCloseOperation(Users.EXIT_ON_CLOSE);
        }
                                           
    }

   
}

